import { fileURLToPath, URL } from 'node:url';
import { defineConfig, loadEnv } from 'vite';
import react from '@vitejs/plugin-react';
import checker from 'vite-plugin-checker';
import VitePluginCompression from 'vite-plugin-compression';

export default defineConfig(({ mode }) => {
  return {
    // 和 webpack 中 的 publicPath 一样
    // 公共基础路径
    base: mode === 'development' ? '/' : '/slate-demo/',
    resolve: {
      alias: {
        '@': fileURLToPath(new URL('./src', import.meta.url)),
      },
      extensions: ['.mjs', '.js', '.mts', '.ts', '.jsx', '.tsx', '.json', '.d.ts'],
    },
    plugins: [
      react(),
      checker({
        typescript: false, // 当typescript语法错误时浏览器给出错误提示弹窗,强制开发者修改ts错误
      }),
      VitePluginCompression(), // gzip 压缩
    ],
    // 构建选项
    // https://zhuanlan.zhihu.com/p/594203360
    build: {
      target: 'es2015',
      outDir: './dist',
      assetsDir: 'static',
      assetsInlineLimit: 8192,
      sourcemap: false,
      reportCompressedSize: false,
      minify: 'terser',
      terserOptions: {
        compress: {
          drop_console: true, // 剔除console,和debugger
          drop_debugger: true,
        },
      },
      rollupOptions: {
        // vite打包是通过rollup来打包的
        output: {
          entryFileNames: '[name].js', // 指定 入口文件输出后的存放位置
          assetFileNames: 'static/[ext]/[name]-[hash].[ext]', // 指定 静态资源输出后的存放位置

          manualChunks: {
            r: ['react', 'react-dom'],
            s: ['slate', 'slate-history', 'slate-react'],
          },
          chunkFileNames: 'static/js/[name]-[hash].js',
        },
      },
    },

    server: {
      https: false, // 当前项目是否选用Https的服务,详情请查看vite官网
      host: '0.0.0.0', // 可以外部访问(局域网访问)

      port: 9097,
      proxy: {
        // '/edu': {
        //   target: 'http://59.110.167.130',
        //   secure: false,
        //   changeOrigin: true,
        // },
      },
    },
    define: {
      // 加载 envDir 中的 .env , .env.[mode] 文件。默认情况下只有前缀为 VITE_ 会被加载，除非更改了 prefixes 配置。
      'process.env': loadEnv(mode, './', 'VITE_'),
    },
    envDir: './',
    envPrefix: 'VITE_',
  };
});
